#ifndef FUNC_H
#define FUNC_H

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "symbole.h"

/*
	Liste chaînée pour gérer les fonctions et procédures déclarées
*/

struct func
{
	char name[128];					// Nom de la fonction
	int start;					// Début de la fonction (ligne p_code)
	int end;					// Fin 
	
	int *reference;					// Tableau pour les paramètres, 0 => copie 1=>référence
	int nReference;					// Nombre de paramètre

	struct func *suivant;				// Fonction suivante
};

struct save_func
{
	struct func *tete;				// Tête de la liste
	struct func *queue;				// Queue
	int size;					// Taille
};

/*Constructeurs*/
struct func* constrFunc(char name[128], int line);
struct save_func* constrSaveFunc();

/*Ajout d'une fonction dans la liste*/
void addFunc(struct save_func *s, char name[128], int line);

/*Obtention d'une fonction*/
struct func* getFunc(struct save_func *s, char name[128]);

/*Recherche de la fonction, et applique un tableau de référence (contenant 0 ou 1)*/
void addParam(struct save_func *s, char name[128], int reference[100], int n);

/*Nettoyage et affichage*/
void nettoyageSaveFunc(struct save_func *s);
void affichageFunc(struct save_func *s);
#endif
